TypeScript에서 any
타입을 사용하면 타입 검사가 무력화되어 TypeScript를 사용하는 장점이 사라집니다.
any
의 문제점any
를 사용하면 타입 오류가 발생해도 컴파일러가 잡아주지 않습니다.let value: any = "Hello";
value = 42; // ✅ 타입 검사 통과 (버그 가능성 증가)
value = true; // ✅ 타입 검사 통과 (의도치 않은 값이 할당될 수 있음)
any
를 사용하는 경우타입을 미처 확정하지 못한 경우, 빠르게 개발하기 위해 any
를 사용합니다.
let temp: any; // 나중에 올바른 타입을 지정할 예정
temp = "test";
temp = 123;
외부 라이브러리에서 반환하는 값이 다양한 타입일 경우 any
를 사용할 수 있습니다.
function handleData(data: any) {
console.log(data);
}
JSON 파싱 결과처럼 구조를 미리 알 수 없는 데이터를 다룰 때 any
를 사용하기도 합니다.
const jsonData: any = JSON.parse('{"name": "Alice", "age": 25}');
하지만, 가능한 아래 대체 방법을 사용하는 것이 좋다.
any
를 대체할 수 있는 방법unknown
타입 사용 (보다 안전한 대체제)unknown
은 any
와 비슷하지만, 타입 검사를 강제하므로 안전합니다.
let value: unknown;
value = "Hello";
value = 42;
// 타입을 확정해야만 사용 가능
if (typeof value === "string") {
console.log(value.toUpperCase()); // ✅ 정상 동작
}
union type
사용 (명확한 타입 지정)예상 가능한 타입을 명확하게 지정하면 any
를 피할 수 있습니다.
let value: string | number;
value = "Hello"; // ✅ 가능
value = 42; // ✅ 가능
value = true; // ❌ 오류 발생 (string | number가 아님)
제네릭을 활용하면 특정 타입을 지정할 수 있어 any
보다 안전합니다.
function identity<T>(arg: T): T {
return arg;
}
let output1 = identity<string>("Hello");
let output2 = identity<number>(42);
any
는 가능한 피하는 것이 좋음unknown
, union type
, generic
같은 대체 방법을 고려